/* 泛型:类型参数化 */
//泛型函数：使用<T>声明泛型类型参数（紧跟函数名），后续可用T表示该类型
function fun(value) {
    return value;
}
//1.显式指定类型调用
var str = fun('zx');
console.log("字符串类型调用：", str);
var num = fun(45);
console.log("数字类型调用：", num, "\n");
//2.ts自动推断类型
var str1 = fun('tx');
console.log("字符串类型调用：", str1);
var num1 = fun(74);
console.log("数字类型调用：", num1, "\n");
//两个参数
function fun1(a, b) {
    return [a, b];
}
var res = fun1('Mary', 36);
console.log("双类型调用：", res);
var res1 = fun1(2, 'Make');
console.log("双类型调用：", res1, "\n");
//对象参数类型是泛型后，在实际应用中要明确泛型类型
var obj1 = {
    value: "Make"
};
console.log("对象单参数泛型调用：", obj1);
var obj2 = {
    value: "Make",
    count: 10,
    active: true
};
console.log("对象多参数泛型调用：", obj2, "\n");
var inter1 = {
    id: 1,
    fun: function (a, b) { return a + b.toString(); }
};
console.log("接口泛型调用：", inter1);
console.log("接口add函数调用结果： ", inter1.fun('zf', 4));
var inter2 = {
    id: 1,
    fun: function (a, b) { return a + b; }
};
console.log("接口泛型调用：", inter2);
console.log("接口add函数调用结果： ", inter2.fun('zf', 'df'));
var rx1 = {
    status: 23,
};
